#ifndef _WX_GTK_PRIVATE_H_
#define _WX_GTK_PRIVATE_H_

#include <gtk/gtk.h>

#include "wx/event.h"
#include "wx/gtk/private/string.h"

#ifndef GTK_CHECK_VERSION
#define GTK_CHECK_VERSION(a, b, c) 0
#endif

#if wxUSE_UNICODE
#define wxGTK_CONV(s) wxConvUTF8.cWX2MB((s))
#define wxGTK_CONV_ENC(s, enc) wxGTK_CONV((s))
#define wxGTK_CONV_FONT(s, font) wxGTK_CONV((s))
#define wxGTK_CONV_SYS(s) wxGTK_CONV((s))
#define wxGTK_CONV_BACK(s) wxConvUTF8.cMB2WX((s))
#elif wxUSE_WCHAR_T
#include "wx/font.h"

WXDLLIMPEXP_CORE extern wxCharBuffer
wxConvertToGTK( const wxString& s,
                wxFontEncoding enc = wxFONTENCODING_SYSTEM );

inline wxCharBuffer wxConvertToGTK( const wxString& s, const wxFont& font ) {
  return wxConvertToGTK( s, font.Ok() ? font.GetEncoding()
                         : wxFONTENCODING_SYSTEM );
}

#define wxGTK_CONV_ENC(s, enc) wxConvertToGTK((s), (enc))
#define wxGTK_CONV_FONT(s, font) wxConvertToGTK((s), (font))
#define wxGTK_CONV(s) wxGTK_CONV_FONT((s), m_font)
#define wxGTK_CONV_SYS(s) wxConvertToGTK((s))
#define wxGTK_CONV_BACK(s)  wxConvLocal.cWC2WX(wxConvUTF8.cMB2WC((s)))
#else // we're limited to ASCII
#define wxGTK_CONV_ENC(s, enc) (s)
#define wxGTK_CONV_FONT(s, font) (s)
#define wxGTK_CONV(s) (s)
#define wxGTK_CONV_SYS(s) (s)
#define wxGTK_CONV_BACK(s) (wxString(s))
#endif

G_BEGIN_DECLS
GtkWidget* gtk_pixmap_new( GdkPixmap *pixmap, GdkBitmap *mask );
void gtk_widget_set_uposition( GtkWidget *widget, gint x, gint y );
void gtk_window_set_policy( GtkWindow *window, gint allow_shrink, gint allow_grow, gint auto_shrink );

G_END_DECLS
extern void wxapp_install_idle_handler();
extern bool g_isIdle;
void wxAddGrab( wxWindow* window );
void wxRemoveGrab( wxWindow* window );
wxString wxEscapeStringForPangoMarkup( const wxString& str );
#ifdef NEED_GTK_ICON_SIZE_LOOKUP
extern "C" gboolean gtk_icon_size_lookup( GtkIconSize  size,
    gint         *width,
    gint         *height );
#endif

#ifdef __WXGTK20__
#include <gdk/gdktypes.h>

bool wxGetStockGtkAccelerator( const char *id, GdkModifierType *mod, guint *key );
#endif

#endif
